using System;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("DeckRule")]
	public class DeckRule : MonoClass
	{
		public enum RuleType
		{
			IS_IN_ANY_SUBSET,
			IS_IN_ALL_SUBSETS,
			IS_NOT_ROTATED,
			COUNT_COPIES_OF_EACH_CARD,
			PLAYER_OWNS_EACH_COPY,
			IS_CLASS_CARD_OR_NEUTRAL,
			COUNT_CARDS_IN_DECK,
			HAS_TAG_VALUE,
			DECK_SIZE,
			UNKNOWN
		}

		public int m_id => method_2<int>("m_id");

		public int m_deckRulesetId => method_2<int>("m_deckRulesetId");

		public int m_appliesToSubsetId => method_2<int>("m_appliesToSubsetId");

		public bool m_appliesToIsNot => method_2<bool>("m_appliesToIsNot");

		public RuleType m_ruleType => method_2<RuleType>("m_ruleType");

		public bool m_ruleIsNot => method_2<bool>("m_ruleIsNot");

		public int m_minValue => method_2<int>("m_minValue");

		public int m_maxValue => method_2<int>("m_maxValue");

		public int m_tag => method_2<int>("m_tag");

		public int m_tagMinValue => method_2<int>("m_tagMinValue");

		public int m_tagMaxValue => method_2<int>("m_tagMaxValue");

		public string m_stringValue => method_4("m_stringValue");

		public string m_errorString => method_4("m_errorString");

		public RuleType Type => method_11<RuleType>("get_Type", Array.Empty<object>());

		public bool RuleIsNot => method_11<bool>("get_RuleIsNot", Array.Empty<object>());

		public bool HasAppliesToSubset => method_11<bool>("get_HasAppliesToSubset", Array.Empty<object>());

		public DeckRule(IntPtr address, string className)
			: base(address, className)
		{
		}

		public DeckRule(IntPtr address)
			: this(address, "DeckRule")
		{
		}

		public static DeckRule CreateFromDBF(DeckRulesetRuleDbfRecord record)
		{
			return MonoClass.smethod_15<DeckRule>(TritonHs.MainAssemblyPath, "", "DeckRule", "CreateFromDBF", new object[1] { record });
		}

		public static DeckRule GetRule(DeckRulesetRuleDbfRecord record)
		{
			return MonoClass.smethod_15<DeckRule>(TritonHs.MainAssemblyPath, "", "DeckRule", "GetRule", new object[1] { record });
		}

		public bool Filter(EntityDef def)
		{
			return method_11<bool>("Filter", new object[1] { def });
		}

		public bool CanRemoveFromDeck(EntityDef def, CollectionDeck deck)
		{
			return method_11<bool>("CanRemoveFromDeck", new object[2] { def, deck });
		}

		public new string ToString()
		{
			return method_13("ToString");
		}

		public bool GetResult(bool val)
		{
			return method_11<bool>("GetResult", new object[1] { val });
		}

		public bool AppliesTo(string cardId)
		{
			return method_11<bool>("AppliesTo", new object[1] { cardId });
		}
	}
}
